﻿@*
//------------------------------------------------------------------------------
//  此代码版权声明为全文件覆盖，如有原作者特别声明，会在下方手动补充
//  此代码版权（除特别声明外的代码）归作者本人Diego所有
//  源代码使用协议遵循本仓库的开源协议及附加协议
//  Gitee源代码仓库：https://gitee.com/diego2098/ThingsGateway
//  Github源代码仓库：https://github.com/kimdiego2098/ThingsGateway
//  使用文档：https://diego2098.gitee.io/thingsgateway-docs/
//  QQ群：605534569
//------------------------------------------------------------------------------
*@

@using BlazorComponent;
@using Microsoft.AspNetCore.Components.Web;
@using System.IO.Ports;
@using ThingsGateway.Core;
@using ThingsGateway.Foundation;
@using ThingsGateway.Foundation.Serial;
@using ThingsGateway.Web.Foundation;
@using Masa.Blazor
@implements IDisposable
<MCard Class="pa-4" Flat Elevation="0" Rounded="false">
    <MRow Justify="JustifyTypes.SpaceBetween" Align="AlignTypes.Center">
        <MTextField Class="mx-1" Label=@(serialProperty.Description(x => x.PortName)) Dense Outlined HideDetails="@("auto")" @bind-Value=@serialProperty.PortName />
        <MTextField Class="mx-1" Label=@(serialProperty.Description(x => x.BaudRate)) Dense Outlined HideDetails="@("auto")" @bind-Value=@serialProperty.BaudRate />

        <MTextField Class="mx-1" Label=@(serialProperty.Description(x => x.DataBits)) Dense Outlined HideDetails="@("auto")" @bind-Value=@serialProperty.DataBits />
        <MSelect Class="mx-1" Style="max-width:200px" @bind-Value="serialProperty.Parity" Outlined Label="@(serialProperty.Description(x => x.Parity))"
                 Items=@(typeof(Parity).GetEnumList())
                 MenuProps="@(props => { props.Auto = true; props.OffsetY = true; })"
                 ItemText=@((u) =>u.des)
                 ItemValue=@(u =>(Parity)u.value)
                 HideDetails=@("auto") Height="30"
                 Dense>
        </MSelect>
        <MSelect Class="mx-1" Style="max-width:200px" @bind-Value="serialProperty.StopBits" Outlined Label="@(serialProperty.Description(x => x.StopBits))"
                 Items=@(typeof(StopBits).GetEnumList())
                 MenuProps="@(props => { props.Auto = true; props.OffsetY = true; })"
                 ItemText=@((u) =>u.des)
                 ItemValue=@(u =>(StopBits)u.value)
                 HideDetails=@("auto") Height="30"
                 Dense>
        </MSelect>
        <MButton Class="mx-1" OnClick=@(async() =>
                 {
                 GetSerialClient().Close();
                 await GetSerialClient().ConnectAsync();
                 }
                 ) Color="primary">
            连接
        </MButton>
        <MButton Class="mx-1" OnClick=@(() =>
                 {
                 GetSerialClient().Close();
                 }
                 ) Color="red">
            断开
        </MButton>
    </MRow>



</MCard>
@code
{
    public void Dispose()
    {
        serialClient.SafeDispose();
    }
    private SerialProperty serialProperty = new SerialProperty();
    private SerialClient serialClient { get; set; } = new();
    private TouchSocketConfig config;
    public Action<string> LogAction;
    protected override void OnInitialized()
    {
        config = new TouchSocketConfig();
        var logMessage = new TouchSocket.Core.LoggerGroup();
        logMessage.AddLogger(new EasyLogger(LogOut));
        config.ConfigureContainer(a => a.RegisterSingleton<ILog>(logMessage));
        serialClient = config.Container.Resolve<SerialClient>();
        base.OnInitialized();
    }
    private void LogOut(string str)
    {
        LogAction?.Invoke(str);
    }
    public SerialClient GetSerialClient()
    {
        config = new TouchSocketConfig();
        var logMessage = new TouchSocket.Core.LoggerGroup();
        logMessage.AddLogger(new EasyLogger(LogOut));
        config.ConfigureContainer(a => a.RegisterSingleton<ILog>(logMessage));
        config.SetSerialProperty(serialProperty).SetBufferLength(300);
        //载入配置
        serialClient.Setup(config);
        return serialClient;
    }


}